/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.tewi.jeeunit.junit4.statements;

import org.junit.runners.model.Statement;
import pl.tewi.jeeunit.contexts.ApplicationServerContext;
import pl.tewi.jeeunit.controller.ServerControllerFactory;
import pl.tewi.jeeunit.controllers.ServerController;
import pl.tewi.jeeunit.exceptions.AnnotationProcessingException;
import pl.tewi.jeeunit.exceptions.GeneralFrameworkException;

/**
 * Bazowy statement JUnit wykorzystywany w narzędziu testującym
 * @author Marcin Kwapisz
 */
abstract class BaseFrameworkStatement extends Statement {

    /**
     * Następny do wykonania statement w łańcuszku. Z tego wynika że dodanie
     * nowego statementa dodaje go przed przekazanym w konstruktorze
     */
    protected final Statement fNext;
    /**
     * Kontekst serwera aplikcayjnego
     */
    protected final ApplicationServerContext applicationServerContext;

    /**
     * Konstruktor bazowy
     * @param fNext
     * @param context 
     */
    public BaseFrameworkStatement(Statement fNext, ApplicationServerContext context) {
        this.fNext = fNext;
        this.applicationServerContext = context;
    }

    /**
     * Kontgroler serwera skojarzony z danym kontekstem serwera aplikacyjnego
     * @return
     * @throws AnnotationProcessingException
     * @throws GeneralFrameworkException 
     */
    protected ServerController getServerController() throws AnnotationProcessingException, GeneralFrameworkException {
        return ServerControllerFactory.getServerController(applicationServerContext);
    }
}
